// Object.defineProperty() 方法会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性，并返回此对象。

const obj = {
  a: 3,
  b: 4,
};

/*
  里面接受三个参数
  obj
    要定义属性的对象。
  prop
    要定义或修改的属性的名称或 Symbol 。
  descriptor
    要定义或修改的属性描述符。
*/

let abc;
Object.defineProperty(obj, "a", {
  // get方法是在这个对象的该属性被访问的时候调用
  // get方法必须要有返回值, return的值就是该属性被访问的时候的值
  get() {
    // console.log("get");
    return abc;
  },
  // set方法是在这个对象的该属性被修改的时候调用
  // set方法可以接收一个参数，是修改后的值
  set(val) {
    // console.log("set");
    // console.log(val);
    abc = val;

    // 试图更新视图了
  },
});

obj.a = 30;
console.log(obj.a);
